package com.atguigu.lease.common.minio;

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

//这三个注解哪个都行,因为是包含(语义继承)关系,这三种是饿汉模式
@Component
//@Configuration
//@SpringBootConfiguration

//这种是懒汉
@EnableConfigurationProperties(MinioProperties.class)
/*
    饿汉:运行就加载,优点无线程并发问题,缺点占内存;
        这里指不管配置类是否加载,自己先加载
    懒汉:第一次使用才加载,延迟加载,优点省内存,缺点有线程并发问题,使用时需要加锁;
        这里指配置类加载自己才加载(配置类使用自己),SpringBoot底层大多都是懒汉
*/
public class MinioConfiguration {

    @Autowired
    private MinioProperties minioProperties;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(minioProperties.getEndpoint())
                .credentials(
                        minioProperties.getAccessKey(),
                        minioProperties.getSecretKey())
                .build();
    }

}
